package zy.blue7.mybatis.test.xml.typeHandlers;

import org.apache.ibatis.type.JdbcType;
import org.apache.ibatis.type.MappedJdbcTypes;
import org.apache.ibatis.type.MappedTypes;
import org.apache.ibatis.type.TypeHandler;
import zy.blue7.mybatis.test.xml.model.User;

import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

/**
 * @author blue7
 * @version 1.0
 * @date 2021/8/2 14:49
 */

/**
 * 自定义类型转换器
 *
 * 如果在配置文件中设置是的  包扫描 指定包下的 类型转换处理器，  todo 尽量设置这俩注解，方便精准确定（类型转换的时候）
 * 如果不是设置的包扫描，则不需要设置这俩 注解，todo 但是配置文件中还是需要设置这俩属性
 */
@MappedTypes(value = {User.class})
@MappedJdbcTypes(value = {JdbcType.VARCHAR})
public class MyTypeHandler implements TypeHandler<User> {
    @Override
    public void setParameter(PreparedStatement ps, int i, User parameter, JdbcType jdbcType) throws SQLException {
        ps.setString(i, parameter.toString());
    }

    @Override
    public User getResult(ResultSet rs, String columnName) throws SQLException {
        String string = rs.getString(columnName);

        /**
         * todo 这里省略将字符串变成 user 对象的实现
         */
        return new User();
    }

    @Override
    public User getResult(ResultSet rs, int columnIndex) throws SQLException {
        String string = rs.getString(columnIndex);

        /**
         * todo 这里省略将字符串变成 user 对象的实现
         */
        return new User();
    }

    @Override
    public User getResult(CallableStatement cs, int columnIndex) throws SQLException {
        String string = cs.getString(columnIndex);

        /**
         * todo 这里省略将字符串变成 user 对象的实现
         */
        return new User();
    }
}
